//package com.framework.service.init.impl;
//
//import com.framework.common.util.date.DateUtil;
//import com.framework.common.util.other.NumeralUtil;
//import com.framework.common.model.security.JwtConstant;
//import com.framework.service.base.BaseService;
//import com.framework.service.init.JwtService;
//import io.jsonwebtoken.Claims;
//import io.jsonwebtoken.Jwts;
//import io.jsonwebtoken.SignatureAlgorithm;
//import org.apache.tomcat.util.codec.binary.Base64;
//import org.slf4j.Logger;
//import org.slf4j.LoggerFactory;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//
//import javax.crypto.SecretKey;
//import javax.crypto.spec.SecretKeySpec;
//import java.nio.charset.StandardCharsets;
//import java.util.Date;
//
///**
// * @author 龘鵺
// * @version 1.0
// * @className com.framework.common.model.security
// * @description jwt业务工具接口实现类
// * @datetime 2022-01-09 11:11:11
// */
//@Service("jwtServiceImpl")
//public class JwtServiceImpl extends BaseService implements JwtService {
//    private Logger log = LoggerFactory.getLogger(JwtServiceImpl.class);
//    @Autowired
//    private JwtConstant jwtConstant;
//
//    /**
//     * @return javax.crypto.SecretKey
//     * @title 生成签名key
//     * @description 生成签名key
//     * @author 龘鵺
//     * @datetime 2022-01-09 11:11:11
//     */
//    private SecretKey getSecretKey() {
//        String stringKey = jwtConstant.getJwtSignKey();
//        byte[] encodedKey = Base64.encodeBase64(stringKey.getBytes(StandardCharsets.UTF_8));
//        return new SecretKeySpec(encodedKey, 0, encodedKey.length, SignatureAlgorithm.HS512.getJcaName());
//    }
//
//    /**
//     * @param account 1 帐号
//     * @return java.lang.String
//     * @title 生成token
//     * @description 生成token
//     * @author 龘鵺
//     * @datetime 2022-01-09 11:11:11
//     */
//    @Override
//    public String createToken(String account) {
//        Date nowDate = new Date();
//        Date expireDate = new Date(nowDate.getTime() + jwtConstant.getExpire().intValue() * NumeralUtil.POSITIVE_ONE_THOUSAND * NumeralUtil.POSITIVE_SIXTY);//过期时间
//        System.out.println(DateUtil.getDateToString(nowDate, null));
//        System.out.println(DateUtil.getDateToString(expireDate, null));
//        return jwtConstant.getTokenSplit() + Jwts.builder()
//                .setHeaderParam("typ", "JWT")
//                .setSubject(account)
//                .setIssuedAt(nowDate)
//                .setExpiration(expireDate)
//                .signWith(getSecretKey(), SignatureAlgorithm.HS512)
//                .compact();
//    }
//
//
//    /**
//     * @param token 1 token字符串
//     * @return io.jsonwebtoken.Claims
//     * @title 获取token中用户信息
//     * @description 获取token中用户信息
//     * @author 龘鵺
//     * @datetime 2022-01-09 11:11:11
//     */
//    @Override
//    public Claims getTokenClaim(String token) {
//        return Jwts.parserBuilder().setSigningKey(getSecretKey()).build().parseClaimsJws(token).getBody();
//    }
//
//    /**
//     * @param expirationTime 1 当前时间
//     * @return boolean
//     * @title 验证token是否过期失效
//     * @description 验证token是否过期失效
//     * @author 龘鵺
//     * @datetime 2022-01-09 11:11:11
//     */
//    @Override
//    public boolean isTokenExpired(Date expirationTime) {
//        return expirationTime.before(new Date());
//    }
//
//    /**
//     * @param token 1 token字符串
//     * @return java.util.Date
//     * @title 获取token失效时间
//     * @description 获取token失效时间
//     * @author 龘鵺
//     * @datetime 2022-01-09 11:11:11
//     */
//    @Override
//    public Date getExpirationDateFromToken(String token) {
//        return getTokenClaim(token).getExpiration();
//    }
//
//    /**
//     * @param token 1 token字符串
//     * @return java.lang.String
//     * @title 获取用户名从token中
//     * @description 获取用户名从token中
//     * @author 龘鵺
//     * @datetime 2022-01-09 11:11:11
//     */
//    @Override
//    public String getUsernameFromToken(String token) {
//        return getTokenClaim(token).getSubject();
//    }
//
//    /**
//     * @param token 1 token字符串
//     * @return java.util.Date
//     * @title 获取jwt发布时间
//     * @description 获取jwt发布时间
//     * @author 龘鵺
//     * @datetime 2022-01-09 11:11:11
//     */
//    @Override
//    public Date getIssuedAtDateFromToken(String token) {
//        return getTokenClaim(token).getIssuedAt();
//    }
//
//}
